<?php

/* @project : Template
 * @auther  : 青云
 * @date    : 2018/1/10
 * @desc    : 菜单模型
 */

namespace app\common\model;

use think\Model;
use app\common\model\SystemGroup;
use think\facade\Cache;

class SystemGroupData extends Model
{
    // 获取组合数据列表
    function getDataListByCode($code)
    {
        // 是否有缓存
        if (false) {
            //获取去缓存
            $group_data_list = $this->getCache($code);
        } else {
            //getGroupByCode查询编码，返回一条数据$group
            $system_group = (new SystemGroup())->getGroupByCode($code);
            if (empty($system_group)) {
                return [];
            }

            $where[] = ['group_id', 'eq', $system_group['id']];
            $group_data_list = $this->where($where)->field('value')->order('sort asc')->select();
            foreach ($group_data_list as &$group_data) {
                //通过json_decode将JSON格式的字符串转换为php变量
                $val_list = json_decode($group_data['value'], true);

                foreach ($val_list as $key => $val) {
                    $group_data[$key] = $val['value'];
                }
                //删除元素
                unset($group_data['value']);
            }
            $this->setCache($code, $group_data_list);
        }
        return $group_data_list;
    }

    // 获取组合数据按 key=>val 格式
    function getKeyValListByCode($code, $field_key = 'key', $field_val = 'val')
    {
        $group_data_list = $this->getDataListByCode($code);
        $list = [];
        foreach ($group_data_list as &$group_data) {
            $list[$group_data[$field_key]] = $group_data[$field_val];
        }
        return $list;
    }

    // 获取指定记录
    function getGroupData($code, $field, $value)
    {
        $list = $this->getDataListByCode($code);

        foreach ($list as $key => $val) {
            if ($val[$field] == $value) {
                return $val;
            }
        }
    }

    // 保存到缓存
    function setCache($code, $data)
    {
        Cache::set('system_group_data_' . $code, $data);

        Cache::set('system_group_data_is_cache' . $code, true);
    }

    // 获取缓存
    function getCache($code)
    {
        return Cache::get('system_group_data_' . $code);
    }

    // 是否数据有变化
    function isCache($code)
    {
        $is_cache = Cache::get('system_group_data_is_cache' . $code);
        if (empty($is_cache)) {
            return false;
        } else {
            return true;
        }
    }

    // 设为数据变化
    function setDirty($code)
    {
        return cache('system_group_data_is_cache' . $code, 'is_dirty');
    }
}
